﻿Public Class ConsultarNiveles

    Dim codigoNivel As Integer
    Dim codigoDept As Integer

    ''' <summary>
    ''' Instanciacion.
    ''' </summary>
    ''' <param name="p_codigoDepartamento">Codigo del departamento.</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Sub New(ByVal p_codigoDepartamento As Integer)
        InitializeComponent()
        codigoDept = p_codigoDepartamento
        codigoNivel = Logica.Gestor.obtenerPrimerNivelDeDepartamento(codigoDept)
        obtenerNiveles()
        llenarPuestos(panel1.Controls.Item(0).Name)
        lblDepartamento.Text = Logica.Gestor.obtenerNombreDepartamentoPorCodigo(codigoDept)
        panel1.Controls.Item(0).ForeColor = Color.Blue
    End Sub

    ''' <summary>
    ''' Obtiene lo niveles del departamento.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub obtenerNiveles()
        '
        Dim x = 20
        Dim y = 10
        Dim nivel As Hashtable
        Dim listaNiveles As List(Of Hashtable)
        '
        listaNiveles = Logica.Gestor.listarNivelesPorDepartamento(codigoDept)
        For Each nivel In listaNiveles
            Dim lblNivel = New System.Windows.Forms.Label
            lblNivel.Name = nivel("codigo")
            lblNivel.Size = New System.Drawing.Size(70, 30)
            lblNivel.Location = New System.Drawing.Point(x, y)
            lblNivel.TabIndex = 1
            lblNivel.Text = "Nivel " + CStr(nivel("nivel"))
            Me.panel1.Controls.Add(lblNivel)
            '
            AddHandler lblNivel.Click, AddressOf listarPuestos
            lblNivel.ContextMenuStrip = menuContextual
            '
            y += 30
        Next
    End Sub

    ''' <summary>
    ''' Lista los puestos del nivel seleccionado.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub listarPuestos(ByVal sender As System.Object, ByVal e As System.EventArgs)
        limpiarColor()
        CType(sender, Label).ForeColor = Color.Blue
        '
        codigoNivel = CType(sender, Label).Name
        llenarPuestos(codigoNivel)
    End Sub

    ''' <summary>
    ''' Torna el texto de un nivel de azul a negro.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub limpiarColor()
        Dim lbl As Label
        For Each lbl In panel1.Controls
            lbl.ForeColor = Color.Black
        Next
    End Sub

    ''' <summary>
    ''' Llena los puestos en un DataGridView
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub llenarPuestos(ByVal p_codigo As Integer)
        Dim dt As DataTable
        dt = Logica.Gestor.listarPuestosPorCodigoNivel(p_codigo)
        dgvPuestos.DataSource = dt
        If dgvPuestos.Rows.Count > 0 Then
            dgvPuestos.Columns(3).Visible = False
            dgvPuestos.Columns(4).Visible = False
            dgvPuestos.Columns(5).Visible = False
            dgvPuestos.Columns(6).Visible = False
            '
            dgvPuestos.Columns(1).HeaderText = "Puesto"
            dgvPuestos.Columns(0).HeaderText = "Código"
            dgvPuestos.Columns(2).HeaderText = "Descripción"
            dgvPuestos.Rows(0).Selected = True
        End If
    End Sub

    Private Sub refrescarPuestos()
        dgvPuestos.Refresh()
    End Sub

    ''' <summary>
    ''' Registra un nuevo nivel.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub btnRegistrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistrar.Click
        Dim lista = Logica.Gestor.listarNivelesPorDepartamento(codigoDept)
        Dim frm As Form
        frm = New RegistrarPuesto(codigoNivel)
        frm.ShowDialog()
        llenarPuestos(codigoNivel)
    End Sub

    ''' <summary>
    ''' Consulta un puesto.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub btnVer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVer.Click
        Try
            Dim frm As Form
            frm = New ConsultarPuesto(dgvPuestos.SelectedRows(0).Cells(0).Value)
            frm.ShowDialog()
        Catch ex As Exception
        End Try
    End Sub

    ''' <summary>
    ''' Modifica un puesto
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click
        Try
            Dim frm As Form
            frm = New ModificarPuesto(dgvPuestos.SelectedRows(0).Cells(0).Value)
            frm.ShowDialog()
        Catch ex As Exception
        End Try
        llenarPuestos(codigoNivel)
    End Sub

    ''' <summary>
    ''' Elimina un puesto.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        If Logica.Gestor.revisarHayPuestosEnNivel(codigoNivel) Then
            Dim ans = MsgBox("Hay un usuario asignado a este puesto, presione OK para asignarle otro puesto.", MsgBoxStyle.OkCancel, "Conflicto de Usuario")
            If ans = MsgBoxResult.Ok Then

            End If
        End If
        Try
            Dim response = MsgBox("¿Eliminar puesto?", vbYesNo)
            If response = vbYes Then
                Logica.Gestor.eliminarPuesto(dgvPuestos.SelectedRows(0).Cells(0).Value)
                llenarPuestos(codigoNivel)
            Else
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Sub VerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VerToolStripMenuItem.Click
        codigoNivel = CType(CType(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl.Name
        Dim frm As Form
        frm = New ConsultarNivel(codigoNivel)
        frm.ShowDialog()
        Dim peda As New ToolStripMenuItem
    End Sub

    Private Sub ModificarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem.Click
        codigoNivel = CType(CType(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl.Name
        Dim frm As Form
        frm = New ModificarNivel(codigoNivel)
        frm.showDialog()
    End Sub

    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        If Logica.Gestor.revisarHayPuestosEnNivel(codigoNivel) Then
            MsgBox("Debe asignar todos los puestos relacionados a este nivel a otro nivel antes de poder eliminarlo.", MsgBoxStyle.Exclamation, "Borrar Nivel")
            Return
        End If
        codigoNivel = CType(CType(sender, ToolStripMenuItem).Owner, ContextMenuStrip).SourceControl.Name
        If MsgBox("Eliminar nivel", MsgBoxStyle.OkCancel, "Confirmación") = 1 Then
            If Logica.Gestor.eliminarNivel(codigoNivel) Then
                MsgBox("El nivel se eliminó con éxito", MsgBoxStyle.Information, "Éxito")
                actualizarNiveles()
            End If
        End If
    End Sub

    Private Sub actualizarNiveles()
        panel1.Controls.Clear()
        obtenerNiveles()
    End Sub

    Private Sub AgregarNuevoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AgregarNuevoToolStripMenuItem.Click
        Dim frm As Form
        frm = New AgregarNivel(codigoDept)
        frm.ShowDialog()
        actualizarNiveles()
    End Sub

End Class
